//
//  ExtenisonFountion.swift
//  SwiftTest
//
//  Created by 齐凯 on 2019/2/14.
//  Copyright © 2019年 QiKai. All rights reserved.
//
/*
 Foundation 框架可以用来：
 
 创建并管理群体，比如数组和字典。
 访问你应用中存储的图片等资源文件。
 创建并管理字符串。
 发送并观察通知。
 创建日期和时间对象。
 自动发现 IP 网络上的设备。
 操作 URL 流。
 异步执行代码。
 */
import Foundation



//MARK: String
extension String{
    /**
     字符串是否为空
     @param str NSString 类型 和 子类
     @return  BOOL类型 true or false
     */
    
    
    
    func kStringIsEmpty(_ str: String!) -> Bool {
        if str.isEmpty {
            return true
        }
        if str == nil {
            return true
        }
        if str.count < 1 {
            return true
        }
        if str == "(null)" {
            return true
        }
        if str == "null" {
            return true
        }
        return false
    }
    // 字符串判空 如果为空返回@“”
    func kStringNullToempty(_ str: String) -> String {
        let resutl = kStringIsEmpty(str) ? "" : str
        return resutl
    }
    // 字符串判空 如果为空返回 某个字符串
    func kStringNullToReplaceStr(_ str: String,_ replaceStr: String) -> String {
        let resutl = kStringIsEmpty(str) ? replaceStr : str
        return resutl
    }
                                                                                                                                                            
}
extension String {
    /// 正则匹配手机号
    var kisMobile: Bool {
        /**
         * 手机号码
         * 移动：134 135 136 137 138 139 147 148 150 151 152 157 158 159  165 172 178 182 183 184 187 188 198
         * 联通：130 131 132 145 146 155 156 166 171 175 176 185 186
         * 电信：133 149 153 173 174 177 180 181 189 199
         * 虚拟：170
         */
        return isMatch("^(1[3-9])\\d{9}$")
    }
    
    /// 正则匹配用户身份证号15或18位
    var kisUserIdCard: Bool {
        return isMatch("(^[0-9]{15}$)|([0-9]{17}([0-9]|X)$)")
    }
    
    /// 正则匹配用户密码6-18位数字和字母组合
    var kisPassword: Bool {
        return isMatch("^(?![0-9]+$)(?![a-zA-Z]+$)[a-zA-Z0-9]{6,18}")
    }
    
    /// 正则匹配URL
    var kisURL: Bool {
        return isMatch("^[0-9A-Za-z]{1,50}")
    }
    
    /// 正则匹配用户姓名,20位的中文或英文
    var kisUserName: Bool {
        return isMatch("^[a-zA-Z\\u4E00-\\u9FA5]{1,20}")
    }
    
    /// k正则匹配用户email
    var kisEmail: Bool {
        return isMatch("[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}")
    }
    
    /// 判断是否都是数字
    var kisNumber: Bool {
        return isMatch("^[0-9]*$")
    }
    
    /// 只能输入由26个英文字母组成的字符串
    var kisLetter: Bool {
        return isMatch("^[A-Za-z]+$")
    }
    
    private func isMatch(_ pred: String ) -> Bool {
        let pred = NSPredicate(format: "SELF MATCHES %@", pred)
        let isMatch: Bool = pred.evaluate(with: self)
        return isMatch
    }
}
extension String{
    /// string 文字大小 字体颜色不一致
    ///
    /// - Parameters:
    ///   - str: 整个string
    ///   - ranStr: 不同的字段
    ///   - color: 不一样的颜色
    ///   - font: 不一样的大小
    /// - Returns: string
    static func kStringDifferent(str:String,ranStr:String,color:UIColor!,font:CGFloat) -> String {
        let string = str//整个
        let ranStr = ranStr//变化的部分
        let attrstring:NSMutableAttributedString = NSMutableAttributedString(string:string)
        
        let str = NSString(string: string)
        
        let theRange = str.range(of: ranStr)
        print("\(theRange)")
        attrstring.addAttribute(NSAttributedString.Key.foregroundColor, value: color, range: theRange)
        
        attrstring.addAttribute(NSAttributedString.Key.font, value: UIFont.systemFont(ofSize: font), range: theRange)
        
        return attrstring.string
    }
}

//MARK: array
extension NSArray{
    
    /**
     数组是否为空
     @param array NSArray 类型 和 子类
     @return BOOL类型 true or false
     */
    func kArrayIsEmpty(_ array: [String]) -> Bool {
        let str: String! = array.joined(separator: "")
        if str == nil {
            return true
        }
        if str == "(null)" {
            return true
        }
        if array.count == 0 {
            return true
        }
        if array.isEmpty {
            return true
        }
        return false
    }
}

//MARK: dictionary
extension Dictionary{
    /**
     字典是否为空
     @param dic NSDictionary 类型 和子类
     @return BOOL类型 true or false
     */
    func kDictIsEmpty(_ dict: NSDictionary) -> Bool {
        let str: String! = "\(dict)"
        if str == nil {
            return true
        }
        if str == "(null)" {
            return true
        }
        if dict .isKind(of: NSNull.self) {
            return true
        }
        if dict.allKeys.count == 0 {
            return true
        }
        return false
    }

}



